home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / asms.arc / FFTHY.ASM < prev    next >
Encoding:
Assembly Source File  |  1987-08-18  |  5.3 KB  |  471 lines

  1. ; FFT    
  2. ;    
  3. ;    SYMBOLIC NAMES FOR DATA MEMORY LOCATIONS
  4. ;
  5. XLEND:    equ 0
  6. ONE:    equ 1
  7. NT:    equ 2
  8. NH:    equ 3
  9. NQ:    equ 4
  10. M:    equ 5
  11. IT:    equ 6
  12. ID:    equ 7
  13. IR:    equ 8
  14. IU:    equ 9
  15. I:    equ 10
  16. J:    equ 11
  17. ND:    equ 12
  18. L:    equ 13
  19. XRQ:    equ 14
  20. XIQ:    equ 15
  21. XRP:    equ 16
  22. XIP:    equ 17
  23. COS:    equ 18
  24. SIN:    equ 19
  25. TEMP1:    equ 20
  26. TEMP2:    equ 21
  27. TEMP3:    equ 22
  28. TEMP4:    equ 23
  29. K:    equ 24
  30. TABPTR:    equ 25
  31. ALOCPTR:equ 26
  32. DIFF:    equ 27
  33. STACKED:equ 28
  34. DIFFS1:  equ 29
  35. DIFFS2:  equ 30
  36. ;
  37.     ORG 0
  38.     LACK    73        ; 73
  39.     SACL     ONE,0
  40.     OUT    ONE,7    ; tell 8088 we're starting
  41.     B    RESET1    ;RESET VECTOR
  42. ;
  43. ;
  44. ;    VECTORS
  45. ;
  46. ;    POINTERS
  47. ;
  48. XLEN:    DW    512    ;ADDR OF FFT SIZE
  49.  
  50. TABLE:            ; SINE TABLE
  51.     DW 0000H
  52.     DW 0192H
  53.     DW 0324H
  54.     DW 04B6H
  55.     DW 0647H
  56.     DW 07D9H
  57.     DW 096AH
  58.     DW 0AFBH
  59.     DW 0C8BH
  60.     DW 0E1BH
  61.     DW 0FABH
  62.     DW 1139H
  63.     DW 12C8H
  64.     DW 1455H
  65.     DW 15E2H
  66.     DW 176DH
  67.     DW 18F8H
  68.     DW 1A82H
  69.     DW 1C0BH
  70.     DW 1D93H
  71.     DW 1F19H
  72.     DW 209FH
  73.     DW 2223H
  74.     DW 23A6H
  75.     DW 2528H
  76.     DW 26A8H
  77.     DW 2826H
  78.     DW 29A3H
  79.     DW 2B1FH
  80.     DW 2C98H
  81.     DW 2E11H
  82.     DW 2F87H
  83.     DW 30FBH
  84.     DW 326EH
  85.     DW 33DEH
  86.     DW 354DH
  87.     DW 36BAH
  88.     DW 3824H
  89.     DW 398CH
  90.     DW 3AF2H
  91.     DW 3C56H
  92.     DW 3DB8H
  93.     DW 3F17H
  94.     DW 4073H
  95.     DW 41CEH
  96.     DW 4325H
  97.     DW 447AH
  98.     DW 45CDH
  99.     DW 471CH
  100.     DW 4869H
  101.     DW 49B4H
  102.     DW 4AFBH
  103.     DW 4C3FH
  104.     DW 4DB1H
  105.     DW 4EBFH
  106.     DW 4FFBH
  107.     DW 5133H
  108.     DW 5269H
  109.     DW 539BH
  110.     DW 54CAH
  111.     DW 55F5H
  112.     DW 571DH
  113.     DW 5842H
  114.     DW 5964H
  115.     DW 5A82H
  116.     DW 5B9DH
  117.     DW 5C84H
  118.     DW 5DC7H
  119.     DW 5ED7H
  120.     DW 5FE3H
  121.     DW 60ECH
  122.     DW 61F0H
  123.     DW 62F1H
  124.     DW 63EFH
  125.     DW 64E8H
  126.     DW 65DDH
  127.     DW 66CFH
  128.     DW 67BDH
  129.     DW 68A6H
  130.     DW 698CH
  131.     DW 6A6DH
  132.     DW 6B4AH
  133.     DW 6C24H
  134.     DW 6CF9H
  135.     DW 6DCAH
  136.     DW 6E96H
  137.     DW 6F5EH
  138.     DW 7023H
  139.     DW 70E2H
  140.     DW 719EH
  141.     DW 7255H
  142.     DW 7307H
  143.     DW 73B5H
  144.     DW 745FH
  145.     DW 7504H
  146.     DW 75A5H
  147.     DW 7641H
  148.     DW 76D9H
  149.     DW 776CH
  150.     DW 77FAH
  151.     DW 7884H
  152.     DW 7909H
  153.     DW 798AH
  154.     DW 7A05H
  155.     DW 7A7DH
  156.     DW 7AEFH
  157.     DW 7B5DH
  158.     DW 7BC5H
  159.     DW 7C29H
  160.     DW 7C89H
  161.     DW 7CE3H
  162.     DW 7D39H
  163.     DW 7D8AH
  164.     DW 7DD6H
  165.     DW 7E1DH
  166.     DW 7E5FH
  167.     DW 7E9DH
  168.     DW 7ED5H
  169.     DW 7F09H
  170.     DW 7F38H
  171.     DW 7F62H
  172.     DW 7F87H
  173.     DW 7FA7H
  174.     DW 7FC2H
  175.     DW 7FD8H
  176.     DW 7FE9H
  177.     DW 7FF6H
  178.     DW 7FFDH
  179.     DW 7FFFH
  180. ;
  181. ;    PROGRAM
  182. ;
  183. RESET1:
  184.     ;Setup FFT
  185.     ldpk 0
  186.     lack xlend
  187.     sacl xlend,0
  188.     lack ONE
  189.     sacl ONE,0
  190.     lt one
  191.     mpyk 0400H
  192.     pac
  193.     sacl diff,0
  194.     mpyk 0BFFH
  195.     pac
  196.     sacl diffs2
  197.     mpyk 600H
  198.     pac
  199.     sacl diffs1
  200.     lack XLEN
  201.     tblr nt
  202.     lar ar0,nt
  203.     larp 0
  204.     mar *-,0
  205.     lt 1H
  206.     zac
  207.     mpyk 0200H
  208.     pac
  209. WAIT:    larp 0
  210.     BIOZ STORE
  211.     B WAIT
  212. STORE:    IN XRQ,PA3
  213.     push
  214.     LAC XRQ,4
  215.     SUB ONE,15
  216.     SACL XRQ,0
  217.     pop
  218.     tblw XRQ
  219.     add diff,0
  220.     tblw XLEND
  221.     sub diff
  222.     add ONE,0
  223.     banz wait
  224.     B FFT
  225. ;
  226.     ORG    200H
  227. ALOC:            ; REAL PART
  228. ;
  229.     ORG    600H
  230. BLOC:            ; IMAGINARY
  231.     ORG 0A00H
  232. ; Data stored do fft
  233.  
  234. FFT:    LACK    1
  235.     SACL     ONE,0
  236.     LT     ONE
  237.     MPYK    XLEN
  238.     PAC
  239.     TBLR    XLEND
  240.     LAC    XLEND,0
  241.     SUB    ONE,0
  242.     SACL    NT,0
  243.     LAC    XLEND,15
  244.     SACH    NH,0
  245.     LAC    XLEND,14
  246.     SACH    NQ,0
  247.     ;
  248.     ;    POINTER INITIALIZATION
  249.     LT    ONE
  250.     MPYK    TABLE
  251.     PAC
  252.     SACL    TABPTR,0    ; TABLE PTR
  253.     MPYK    ALOC
  254.     PAC
  255.     SACL    ALOCPTR,0        ; REALS PTR
  256.     MPYK    BLOC
  257.     PAC    
  258.     SUB    ALOCPTR,0
  259.     SACL    DIFF,0        ; BLOC - ALOC
  260.     ;
  261.     ;    BITREV
  262.     ;
  263.     ZAC
  264.     SACL    I,0
  265.     SACL    J,0
  266. LAB0:    ZALS    NT
  267.     SUB    ONE,1
  268.     SUB    I,0
  269.     BLZ    LAB03
  270.         ZALS    J
  271.         SUB    I,0
  272.         BLEZ    LAB01
  273.             LAC    ALOCPTR,0
  274.             ADD    J,0
  275.             TBLR    TEMP1
  276.             ADD    DIFF,0
  277.             TBLR    TEMP3
  278.             LAC    ALOCPTR,0
  279.             ADD    I,0
  280.             TBLR    TEMP2
  281.             ADD    DIFF,0
  282.             TBLR    TEMP4
  283.             LAC    ALOCPTR,0
  284.             ADD    J,0
  285.             TBLW    TEMP2
  286.             ADD    DIFF,0
  287.             TBLW    TEMP4
  288.             LAC    ALOCPTR,0
  289.             ADD    I,0
  290.             TBLW    TEMP1
  291.             ADD    DIFF,0
  292.             TBLW    TEMP3
  293. LAB01:        LAC    NH,0
  294.         SACL    K,0
  295. LAB02:        LAC    J,0
  296.         SUB    K,0
  297.         BLZ    LAB025    
  298.             SACL    J,0
  299.             LAC    K,15
  300.             SACH    K,0
  301.             B    LAB02
  302. LAB025:        LAC    J,0
  303.         ADD    K,0
  304.         SACL    J,0
  305.     ZALS    I
  306.     ADD    ONE,0
  307.     SACL    I,0
  308.     B    LAB0
  309. LAB03:
  310.     ;
  311.     ;
  312.     ZAC
  313.     SACL    M,0
  314.     SACL    IT,0
  315.     LACK    1
  316.     SACL    ID,0
  317.     SACL    IR,0
  318.  
  319.     LAC    NQ,1
  320.     SACL    IU,0
  321.  
  322. BEGIN:
  323.     LAC    ID,0
  324.     SACL    I,0
  325.     ADD    ID,0
  326.     SACL    ID,0
  327.     ZAC
  328.     SACL    J,0
  329.  
  330. LAB1:
  331.     LAC    I,0
  332.     SUB    J,0
  333.     BLEZ    LAB5
  334.     LAC     TABPTR,0
  335.     ADD    M,0
  336.     TBLR    SIN
  337.     LAC    TABPTR,0
  338.     ADD    NQ,0
  339.     SUB    M,0
  340.     TBLR    COS
  341.     LAC    J,0
  342.     SUB    IR,0
  343.     BLZ    LAB2
  344.     LAC    M,0
  345.     SUB    IT,0
  346.     SACL    M,0
  347.     ZAC
  348.     SUB    COS,0
  349.     SACL    COS,0
  350.     B    LAB3
  351.  
  352. LAB2:
  353.     LAC    M,0
  354.     ADD    IT,0
  355.     SACL    M,0
  356.  
  357. LAB3:
  358.     LAC    J,0
  359.     SACL    ND,0
  360.  
  361. LAB4:
  362.     LAC    NT,0
  363.     SUB    ND,0
  364.     BLZ    LAB45
  365.     LAC    I,0
  366.     ADD    ND,0
  367.     SACL    L,0
  368.     LAC    ALOCPTR,0
  369.     ADD    L,0
  370.     TBLR    XRQ
  371.     ADD    DIFF,0            
  372.     TBLR    XIQ
  373.     LAC    ALOCPTR,0
  374.     ADD    ND,0
  375.     TBLR    XRP
  376.     ADD    DIFF,0            
  377.     TBLR    XIP
  378.     ;
  379.     ; BUTTERFLY
  380.     ;
  381.     ZAC
  382.     LT    COS
  383.     MPY     XRQ
  384.     LTA    SIN
  385.     MPY    XIQ
  386.     LTA    COS    
  387.     SACH    TEMP1,0
  388.     ZAC
  389.     MPY    XIQ
  390.     LTA    SIN
  391.     MPY    XRQ
  392.     SPAC
  393.     SACH    TEMP2,0
  394.     ;
  395.     LAC    XRP,14
  396.     ADD    TEMP1,15
  397.     SACH    XRP,1
  398.     SUBH    TEMP1
  399.     SACH    XRQ,1
  400.  
  401.     LAC    XIP,14
  402.     ADD    TEMP2,15
  403.     SACH    XIP,1
  404.     SUBH    TEMP2
  405.     SACH    XIQ,1
  406.     ;
  407.     ;    END OF BUTTERFLY
  408.     ;
  409.     LAC    ALOCPTR,0
  410.     ADD    L,0
  411.     TBLW    XRQ
  412.     ADD    DIFF,0
  413.     TBLW     XIQ
  414.     LAC    ALOCPTR,0
  415.     ADD    ND,0
  416.     TBLW    XRP
  417.     ADD    DIFF,0            
  418.     TBLW    XIP
  419.  
  420.     LAC    ND,0
  421.     ADD    ID,0
  422.     SACL    ND,0
  423.     B    LAB4
  424.  
  425. LAB45:
  426.     LAC    J,0
  427.     ADD    ONE,0
  428.     SACL    J,0
  429.     B    LAB1
  430.  
  431. LAB5:
  432.     LAC    I,0
  433.     SACL    IR,0
  434.     LAC    IU,15
  435.     SACH    IU,0
  436.     SACH    IT,0
  437. LAB6:
  438.     LAC    NH,0
  439.     SUB    I,0
  440.     BGZ    BEGIN
  441. SPECT:    larp 0
  442. ;    lac xlend,15
  443. ;    sach xlend
  444.     lar 0,xlend
  445.     mar *-,0
  446.     lac alocptr,0
  447. PICK1:    tblr TEMP1
  448.     add DIFF,0
  449.     tblr temp2
  450.     push
  451.     zac
  452.     lt temp1
  453.     mpy temp1
  454.     lta temp2
  455.     mpy temp2
  456.     apac
  457.     sach temp1
  458.     sacl temp2
  459.     pop
  460.     add diffs1
  461.     tblw temp1
  462.     add one,9
  463.     tblw temp2
  464.     sub diffs2
  465.     banz pick1
  466. STOP:    LACK    58H        ; 88
  467.     SACL     ONE,0
  468.     OUT    ONE,7    ; tell 8088 we're done
  469. LOOP:    B    LOOP
  470.  
  471.